package com.ruoyi.entity;

import com.ruoyi.product.domain.ProductSku;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

@Data
public class CouponDto {
    private Long id;
    private Long couponGroupId;
//    private String couponGroupName;
    private String code;
    private String name;
    private Long type;
//    private String typeName; // 优惠券类型名称
    private BigDecimal value;
    private Integer couponStock;
    private BigDecimal minAmount;
    private Date startTime;
    private Date endTime;
    private Long status;   // 状态（0 未使用，1 已使用，2 已过期）
//    private String statusName; // 状态名称
    private String remark;
    private List<ProductSku> Skus; // 适用商品列表

    /**
     * 实时更新优惠券状态
     * 根据当前时间与优惠券开始、结束时间的比较，自动更新优惠券状态
     * @return 更新后的状态值 (0:未使用, 1:已使用, 2:已过期)
     */
    public Long updateStatus() {
        // 如果优惠券已使用，则不更改状态
        if (this.status != null && this.status == 1) {
            return this.status;
        }

        Date now = new Date();
        // 检查是否已过期
        if (this.endTime != null && now.after(this.endTime)) {
            this.status = 2L; // 已过期
        }
        // 检查是否未开始（这种情况较少见，因为一般创建时就在有效期内）
        else if (this.startTime != null && now.before(this.startTime)) {
            this.status = 0L; // 未使用（未开始）
        }
        // 其他情况保持为未使用
        else {
            this.status = 0L; // 未使用
        }
        return this.status;
    }
}
